home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / bits / sched.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-11-14  |  6.6 KB  |  190 lines

  1. /* Definitions of constants and data structure for POSIX 1003.1b-1993
  2.    scheduling interface.
  3.    Copyright (C) 1996-1999,2001-2003,2005,2006,2007
  4.    Free Software Foundation, Inc.
  5.    This file is part of the GNU C Library.
  6.  
  7.    The GNU C Library is free software; you can redistribute it and/or
  8.    modify it under the terms of the GNU Lesser General Public
  9.    License as published by the Free Software Foundation; either
  10.    version 2.1 of the License, or (at your option) any later version.
  11.  
  12.    The GNU C Library is distributed in the hope that it will be useful,
  13.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.    Lesser General Public License for more details.
  16.  
  17.    You should have received a copy of the GNU Lesser General Public
  18.    License along with the GNU C Library; if not, write to the Free
  19.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  20.    02111-1307 USA.  */
  21.  
  22. #ifndef __need_schedparam
  23.  
  24. #ifndef _SCHED_H
  25. # error "Never include <bits/sched.h> directly; use <sched.h> instead."
  26. #endif
  27.  
  28.  
  29. /* Scheduling algorithms.  */
  30. #define SCHED_OTHER    0
  31. #define SCHED_FIFO    1
  32. #define SCHED_RR    2
  33. #ifdef __USE_GNU
  34. # define SCHED_BATCH    3
  35. #endif
  36.  
  37. #ifdef __USE_MISC
  38. /* Cloning flags.  */
  39. # define CSIGNAL       0x000000ff /* Signal mask to be sent at exit.  */
  40. # define CLONE_VM      0x00000100 /* Set if VM shared between processes.  */
  41. # define CLONE_FS      0x00000200 /* Set if fs info shared between processes.  */
  42. # define CLONE_FILES   0x00000400 /* Set if open files shared between processes.  */
  43. # define CLONE_SIGHAND 0x00000800 /* Set if signal handlers shared.  */
  44. # define CLONE_PTRACE  0x00002000 /* Set if tracing continues on the child.  */
  45. # define CLONE_VFORK   0x00004000 /* Set if the parent wants the child to
  46.                      wake it up on mm_release.  */
  47. # define CLONE_PARENT  0x00008000 /* Set if we want to have the same
  48.                      parent as the cloner.  */
  49. # define CLONE_THREAD  0x00010000 /* Set to add to same thread group.  */
  50. # define CLONE_NEWNS   0x00020000 /* Set to create new namespace.  */
  51. # define CLONE_SYSVSEM 0x00040000 /* Set to shared SVID SEM_UNDO semantics.  */
  52. # define CLONE_SETTLS  0x00080000 /* Set TLS info.  */
  53. # define CLONE_PARENT_SETTID 0x00100000 /* Store TID in userlevel buffer
  54.                        before MM copy.  */
  55. # define CLONE_CHILD_CLEARTID 0x00200000 /* Register exit futex and memory
  56.                         location to clear.  */
  57. # define CLONE_DETACHED 0x00400000 /* Create clone detached.  */
  58. # define CLONE_UNTRACED 0x00800000 /* Set if the tracing process can't
  59.                       force CLONE_PTRACE on this clone.  */
  60. # define CLONE_CHILD_SETTID 0x01000000 /* Store TID in userlevel buffer in
  61.                       the child.  */
  62. # define CLONE_STOPPED    0x02000000 /* Start in stopped state.  */
  63. #endif
  64.  
  65. /* The official definition.  */
  66. struct sched_param
  67.   {
  68.     int __sched_priority;
  69.   };
  70.  
  71. __BEGIN_DECLS
  72.  
  73. #ifdef __USE_MISC
  74. /* Clone current process.  */
  75. extern int clone (int (*__fn) (void *__arg), void *__child_stack,
  76.           int __flags, void *__arg, ...) __THROW;
  77.  
  78. /* Unshare the specified resources.  */
  79. extern int unshare (int __flags) __THROW;
  80.  
  81. /* Get index of currently used CPU.  */
  82. extern int sched_getcpu (void) __THROW;
  83. #endif
  84.  
  85. __END_DECLS
  86.  
  87. #endif    /* need schedparam */
  88.  
  89. #if !defined __defined_schedparam \
  90.     && (defined __need_schedparam || defined _SCHED_H)
  91. # define __defined_schedparam    1
  92. /* Data structure to describe a process' schedulability.  */
  93. struct __sched_param
  94.   {
  95.     int __sched_priority;
  96.   };
  97. # undef __need_schedparam
  98. #endif
  99.  
  100.  
  101. #if defined _SCHED_H && !defined __cpu_set_t_defined
  102. # define __cpu_set_t_defined
  103. /* Size definition for CPU sets.  */
  104. # define __CPU_SETSIZE    1024
  105. # define __NCPUBITS    (8 * sizeof (__cpu_mask))
  106.  
  107. /* Type for array elements in 'cpu_set_t'.  */
  108. typedef unsigned long int __cpu_mask;
  109.  
  110. /* Basic access functions.  */
  111. # define __CPUELT(cpu)    ((cpu) / __NCPUBITS)
  112. # define __CPUMASK(cpu)    ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
  113.  
  114. /* Data structure to describe CPU mask.  */
  115. typedef struct
  116. {
  117.   __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS];
  118. } cpu_set_t;
  119.  
  120. /* Access functions for CPU masks.  */
  121. # if __GNUC_PREREQ (2, 91)
  122. #  define __CPU_ZERO_S(setsize, cpusetp) \
  123.   do __builtin_memset (cpusetp, '\0', setsize); while (0)
  124. # else
  125. #  define __CPU_ZERO_S(setsize, cpusetp) \
  126.   do {                                          \
  127.     size_t __i;                                      \
  128.     size_t __imax = (setsize) / sizeof (__cpu_mask);                  \
  129.     cpu_set_t *__arr = (cpusetp);                          \
  130.     for (__i = 0; __i < __imax; ++__i)                          \
  131.       __arr->__bits[__i] = 0;                              \
  132.   } while (0)
  133. # endif
  134. # define __CPU_SET_S(cpu, setsize, cpusetp) \
  135.   ({ size_t __cpu = (cpu);                              \
  136.      __cpu < 8 * (setsize)                              \
  137.      ? ((cpusetp)->__bits[__CPUELT (__cpu)] |= __CPUMASK (__cpu)) : 0; })
  138. # define __CPU_CLR_S(cpu, setsize, cpusetp) \
  139.   ({ size_t __cpu = (cpu);                              \
  140.      __cpu < 8 * (setsize)                              \
  141.      ? ((cpusetp)->__bits[__CPUELT (__cpu)] &= ~__CPUMASK (__cpu)) : 0; })
  142. # define __CPU_ISSET_S(cpu, setsize, cpusetp) \
  143.   ({ size_t __cpu = (cpu);                              \
  144.      __cpu < 8 * (setsize)                              \
  145.      ? (((cpusetp)->__bits[__CPUELT (__cpu)] & __CPUMASK (__cpu))) != 0 : 0; })
  146.  
  147. # define __CPU_COUNT_S(setsize, cpusetp) \
  148.   __sched_cpucount (setsize, cpusetp)
  149.  
  150. # if __GNUC_PREREQ (2, 91)
  151. #  define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
  152.   (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0)
  153. # else
  154. #  define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
  155.   ({ cpu_set_t *__arr1 = (cpusetp1);                          \
  156.      cpu_set_t *__arr2 = (cpusetp2);                          \
  157.      size_t __imax = (setsize) / sizeof (__cpu_mask);                  \
  158.      size_t __i;                                  \
  159.      for (__i = 0; __i < __imax; ++__i)                          \
  160.        if (__arr1->__bits[__i] != __arr2->__bits[__i])                  \
  161.      break;                                      \
  162.      __i == __imax; })
  163. # endif
  164.  
  165. # define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \
  166.   ({ cpu_set_t *__dest = (destset);                          \
  167.      cpu_set_t *__arr1 = (srcset1);                          \
  168.      cpu_set_t *__arr2 = (srcset2);                          \
  169.      size_t __imax = (setsize) / sizeof (__cpu_mask);                  \
  170.      size_t __i;                                  \
  171.      for (__i = 0; __i < __imax; ++__i)                          \
  172.        __dest->__bits[__i] = __arr1->__bits[__i] op __arr2->__bits[__i];      \
  173.      __dest; })
  174.  
  175. # define __CPU_ALLOC_SIZE(count) \
  176.   ((((count) + __NCPUBITS - 1) / __NCPUBITS) * 8)
  177. # define __CPU_ALLOC(count) __sched_cpualloc (count)
  178. # define __CPU_FREE(cpuset) __sched_cpufree (cpuset)
  179.  
  180. __BEGIN_DECLS
  181.  
  182. extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
  183.   __THROW;
  184. extern cpu_set_t *__sched_cpualloc (size_t __count) __THROW __wur;
  185. extern void __sched_cpufree (cpu_set_t *__set) __THROW;
  186.  
  187. __END_DECLS
  188.  
  189. #endif
  190.